package com.achieve.wx.config;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.WxMaConfig;
import cn.binarywang.wx.miniapp.config.impl.WxMaRedisBetterConfigImpl;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import me.chanjar.weixin.common.redis.WxRedisOps;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class WxMaConfiguration {
    @Autowired
    private WxMaProperties properties;
    @Autowired
    private StringRedisTemplate redisTemplate;

    @Bean
    public Map<String, WxMaConfig> wxMaConfigs() {
        Map<String, WxMaConfig> configMap = new HashMap<>();
        WxRedisOps wxRedisOps = new RedisTemplateWxRedisOps(redisTemplate);

        properties.getConfigs().forEach((key, config) -> {
            WxMaRedisBetterConfigImpl maConfig = new WxMaRedisBetterConfigImpl(wxRedisOps, "wechat");
            maConfig.setAppid(config.getAppid());
            maConfig.setSecret(config.getSecret());
            maConfig.setMsgDataFormat(config.getMsgDataFormat());
            configMap.put(key, maConfig);
        });

        return configMap;
    }

    @Bean
    public WxMaService wxMaService() {
        WxMaService service = new WxMaServiceImpl();
        service.setMultiConfigs(wxMaConfigs());
        return service;
    }
}
